Ext.define ('rangoaqui.controller.phone.HomeController', 
{
		extend: 'Ext.app.Controller',
		
		config : {
		
				control: {
					'button[action=abrirCupons]' : {
						tap: 'goToCuponPage'
					},
					'button[action=goHome]' : {
						tap: 'goHome'
					},
					'button[action=showPopUpCupons]' : {
						tap: 'showPopUpCupons'
					},
					'button[action=showPerfil]' : {
						tap: 'showPerfil'
					},
					'button[action=showEditUser]' : {
						tap: 'showEditUser'
					},
					'button[action=salvarDados]' : {
						tap: 'onSalvarDados'
					},
					'button[action=cancelarEditUser]' : {
						tap: 'onCancelarEditUser'
					},
					listaEstabelecimentos : {
						itemtap: 'onItemTapEstabelecimentos'
					},
					listaPromocoes : {
						itemtap: 'onItemTapPromocoes'
					},
					'button[action=fecharPromocao]' : {
						tap: 'hidePromocaoPopup'
					},
					'button[action=indicar]' : {
						tap: 'onIndicarEstabelecimento'
					},
					'button[action=showMapa]' : {
						tap: 'showMapa'
					},
					'button[action=fecharCupons]' : {
						tap: 'hideCuponsPopup'
					},
					'button[action=fecharMapa]' : {
						tap: 'hideMapaPopup'
					},
					'button[action=enviarEmail]' : {
						tap: 'enviarEmail'
					},
					'button[action=fecharEnviarEmail]' : {
						tap: 'hideSenhaPopup'
					},
					'homePage #searchBox' : {
						clearicontap : 'onClearSearch',
						keyup: 'onSearchKeyUp'
					}
				},
				
				refs: {
					
					//cuponPage : {
				//		xtype : 'CuponPage',
				//		selector: 'CuponPage',
				//		autoCreate: true
				//	},
					perfilPage : {
						xtype : 'PerfilPage',
						selector: 'PerfilPage',
						autoCreate: true
					},
					userPopup: {  
                      selector: 'formpanel #editUser',  
                      xtype: 'editUser',  
                      autoCreate: true             
					},
					senhaPopup: {  
                      selector: 'formpanel #EsqSenha',  
                      xtype: 'EsqSenha',  
                      autoCreate: true             
					},
					//cupomPopup: {  
                   //   selector: 'panel #showCupons',  
                   //   xtype: 'showCupons',  
                   //   autoCreate: true             
				//	} ,
					estabelecimentoPage : {
						selector: 'EstabelecimentoPage',
						xtype: 'EstabelecimentoPage',
						autoCreate: true
					},
					
					listaEstabelecimentos : {
						selector: 'estabelecimentosList',
						xtype: 'nestedListEstabelecimentos',
						autoCreate: true
					},					
					
					listaPromocoes : 'EstabelecimentoPage #listaPromocoes',
					estabTitleBar : 'EstabelecimentoPage #estab_title_bar',
					promocaoPopup : {
						selector : 'formpanel #promocao',
						xtype: 'promocao',
						autoCreate: true
					},
					
					mapaPopup : {
						selector : 'formpanel #mapa',
						xtype: 'mapa',
						autoCreate: true
					}
					
					
				}
				
		}, 
		
		setAnimation: function (_type, _direction) {
			Ext.Viewport.getLayout().setAnimation (
			{
				type: _type,
				direction: _direction
			});
		},
		
		goToCuponPage : function () {
		
			var sto =  Ext.getStore('Cupom');
			var userSto = Ext.getStore('Usuario');
			var usuario = userSto.getAt(0);
			
			var lb_pontos = this.getCuponPage().down('#lb_pontos');
			
			if (!sto.isLoaded())
					sto.load();
			
			if (!sto.isFiltered()) {
				sto.clearFilter();
				sto.filter ('is_novo', 'true');
			}
			//console.log(usuario.get('num_pontos'));
			lb_pontos.setData({num_pontos: usuario.get('num_pontos')});
			
			this.setAnimation ('slide', 'left');
			Ext.Viewport.setActiveItem(this.getCuponPage()); 
		},
		
		showPopUpCupons: function () {
			 var popup = this.getCupomPopup();
			 var sto =  Ext.getStore('Cupom_all');
			 
			 if (!sto.isLoaded())
					sto.load();
			 
			 Ext.Viewport.add(popup);
			 
			 popup.show();
		},
		
		showPerfil : function () {
			this.setAnimation ('slide', 'left');
			
			var sto = Ext.getStore('Usuario');
			var cupons =  Ext.getStore('Cupom_all');
			var cupom =  Ext.getStore('Cupom');
			
			if (!sto.isLoaded())
				sto.load();
				
			if (!cupom.isLoaded())
					cupom.load();
			
			if (!cupons.isLoaded())
					cupons.load();
					
			if (!cupom.isFiltered()) {
				cupom.clearFilter();
				cupom.filter ('is_novo', 'true');
			}
			
			var imgPanel = this.getPerfilPage().down("#user_image");
			var dataPanel = this.getPerfilPage().down("#user_data");
			var lb_pontos = this.getPerfilPage().down('#lb_pontos');
			
			var usuario = sto.getAt(0); //retirar o primeiro(e unico) record
			
			imgPanel.setData({url_img: usuario.get('url_img')});
			dataPanel.setData({nm_usuario: usuario.get('nm_usuario'), num_pontos: usuario.get('num_pontos'), num_rangos: cupons.getCount()});
			lb_pontos.setData({num_pontos: usuario.get('num_pontos')});
			
			Ext.Viewport.setActiveItem(this.getPerfilPage()); 
		},
		
		showEditUser: function() {
			
			var popup = this.getUserPopup();
			var sto      = Ext.getStore('Usuario');
			
			if (!sto.isLoaded())
				sto.load();
			
			Ext.Viewport.add(popup);
			
			popup.setRecord(sto.getAt(0));
			popup.show();
			
		},
		
		showEsqSenha: function() {
			var popup = this.getSenhaPopup();
			Ext.Viewport.add(popup);
			popup.show();
		},
		
		enviarEmail: function() {
			Ext.Msg.alert("Opa, está tudo bem agora :)", 
				"Um email foi enviado para você para a definição de uma nova senha.",
				this.hideSenhaPopup());
		},
		
		checkDadosUsuario: function (nm_usuario, email, senha) {
			var checked = !Ext.isEmpty(nm_usuario) && !Ext.isEmpty(senha) && !Ext.isEmpty(email),
			ret = {
				ok: checked,
				nm_usuario: nm_usuario,
				email : email,
				senha: senha
			};
			
			return ret;
		},
		
		onSalvarDados: function (button,e,options) {
			var formObj = button.up('editUser');
			var sto         = Ext.getStore('Usuario');
			
			var formData = formObj.getValues();
						
			var model = Ext.create('rangoaqui.model.Usuario', 
			{
				id: formData.id , nm_usuario: formData.nm_usuario,
				email: formData.email, senha: formData.senha, num_pontos: 10,
				url_img: formData.url_img	
			}			
			); 
			
			var msg = '';
			var erros   = model.validate();
			if (!erros.isValid()) {
				Ext.each(erros.items,function(rec,i)
				{ 
                  msg += rec._message+"<br>";
                });
				
				Ext.Msg.alert("Opa, aguns dados incorretos :)", 
				msg,
				Ext.emptyFn);
				
				return;
			}
			
			if (formData.id) // o usuario esta sendo editado
			{
				var usuario    = sto.findRecord('id', formData.id);
				
				var nm_usuario = usuario.get('nm_usuario');
				var url_img = usuario.get('url_img');
			
				usuario.set ('id', formData.id);
				usuario.set ('url_img', formData.url_img);
				usuario.set ('nm_usuario', formData.nm_usuario);
				usuario.set ('senha', formData.senha);
				usuario.set ('email', formData.email);
				
				usuario.setDirty();
				sto.sync();
				
				if ( nm_usuario != formData.nm_usuario || url_img != formData.url_img) {
					var imgPanel = this.getPerfilPage().down("#user_image");
					imgPanel.setData({nm_usuario: usuario.get('nm_usuario'), url_img: usuario.get('url_img')});
				}
			}// if formdata.id
			else { //novo usuario
				var usuario = Ext.create('rangoaqui.model.Usuario');
				
				usuario.set ('url_img', formData.url_img);
				usuario.set ('nm_usuario', formData.nm_usuario);
				usuario.set ('senha', formData.senha);
				usuario.set ('email', formData.email);
				usuario.set ('num_pontos', 10);
				
				sto.add(usuario);
				sto.sync();
				
				Ext.Msg.alert("Seja bem-vindo(a), "+formData.nm_usuario+"!", 
				"Para que você possa prosseguir rangando, um email foi enviado para "+formData.email+".",
				Ext.emptyFn);
				
				//sto.removeAll();
			}
			
			this.getUserPopup().hide();
						
		},
		
		onCancelarEditUser : function () {
			this.getUserPopup().hide();
		},
		
		onItemTapEstabelecimentos: function (view, idx, target, record, evt, opts) {
			// limpar a selecao depois de 100 ms
				setTimeout(function() {
					view.deselect(idx);
				}, 100);
				
			if (record) { 
				var imgEstabelecimento = this.getEstabelecimentoPage().down("#img_estabelecimento");
				var dadosEstabelecimento = this.getEstabelecimentoPage().down("#dados_estabelecimento");
				var mapaEstabelecimento = this.getEstabelecimentoPage().down("#mapa_estabelecimento");
				//alert(record.get('cd_estabelecimento'));
				imgEstabelecimento.setData ({url_img: record.get('url_img')});
				dadosEstabelecimento.setData(
					{
						id:  record.get('id'),
						num_indicacoes_geral: record.get('num_indicacoes_geral'),
						num_promocoes_ativas: record.get('num_promocoes_ativas'),
						nm_estabelecimento: record.get('nm_estabelecimento'),
						endereco : record.get('endereco'),
						phone: record.get('phone'),
						latitude: record.get('latitude'),
						longitude: record.get('longitude')
					}
				);
			var estabTitleBar = this.getEstabTitleBar();
			estabTitleBar.setTitle("&nbsp;&nbsp;"+record.get('nm_estabelecimento'));
			
			var latLngCoordinates = new google.maps.LatLng(record.get('latitude'), record.get('longitude'));
			mapaEstabelecimento.setMapCenter(latLngCoordinates);
			var marker = new google.maps.Marker({
				position: latLngCoordinates
			});			
			marker.setMap(mapaEstabelecimento.getMap());
			
				
				var promocoes = Ext.getStore('Promocoes');
				promocoes.load(); 
				
			} else { return; } // EH PRA LANCAR ERRO, PORRA
				
			this.setAnimation ('slide', 'left');
			Ext.Viewport.setActiveItem(this.getEstabelecimentoPage()); 
		},
		
		onItemTapPromocoes: function (view, idx, target, record, evt, opts) {
		
			// limpar a selecao depois de 100 ms
				setTimeout(function() {
					view.deselect(idx);
				}, 100);
				
				if (record) {
				
					 var popup = this.getPromocaoPopup();
					 var sto =  Ext.getStore('Promocoes');
					 
					 if (!sto.isLoaded())
							sto.load();
							
					var data = {
							url_img: record.get('url_img'),
							dt_inicio: record.get('dt_inicio'),
							dt_fim: record.get('dt_fim')	,
							nm_promocao: record.get('nm_promocao'),
							ds_promocao: record.get('ds_promocao')
						};
							
					var dadosPromocao = this.getPromocaoPopup().down("#dados_promocao");
					var descPromocao = this.getPromocaoPopup().down("#label_desc_promocao");
					
					dadosPromocao.setData(data);
					descPromocao.setData(data);
					
					Ext.Viewport.add(popup);
					 
					 popup.show();
				
				} else {return;}
		},
		hidePromocaoPopup : function () {
			this.getPromocaoPopup().hide();
		},
		hideCuponsPopup : function () {
			this.getCupomPopup().hide();
		},
		hideMapaPopup: function () {
			this.getMapaPopup().hide();
		},
		hideSenhaPopup: function () {
			this.getSenhaPopup().hide();
		},
		onIndicarEstabelecimento: function () {
			var form = this.getEstabelecimentoPage().down("#dados_estabelecimento");
			var data = form.getData();
			
			var sto   = Ext.getStore ('Estabelecimento');
			//sto.load(); //sincronizar para reduzir o risco de ter incosistencias no banco
			
			var estabelecimento = sto.findRecord('id', data.id);
			estabelecimento.set('num_indicacoes_geral', parseInt(estabelecimento.get('num_indicacoes_geral')) + 1);
			
			estabelecimento.setDirty();
			sto.sync();
						
			Ext.Msg.alert('Você indicou ' + data.nm_estabelecimento, 'Indique sempre e concorra a novos cupons!', Ext.emptyFn);
		},
		
		showMapa: function () {
			var popup = this.getMapaPopup();
			
			//var mapa = popup.down("#meuMapa");
			//popup.on('maprender', this.onMapRender, this, { single: true });
			var form = this.getEstabelecimentoPage().down("#dados_estabelecimento");
			var data = form.getData();
			var latLngCoordinates = new google.maps.LatLng(data.latitude,data.longitude);
			var marker = new google.maps.Marker({
				position: latLngCoordinates
			});
			
			marker.setMap(popup.getMap());
			
			popup.setMapCenter(latLngCoordinates);
			
			Ext.Viewport.add(popup);
					 
			popup.show();
      },
	  
	  onMapRender: function(e) {
			var form = this.getEstabelecimentoPage().down("#dados_estabelecimento");
			var data = form.getData();
			console.log (data);
			//var popup = this.getMapaPopup();
			var mapa = this.getMapaPopup();
			
			 var latLngCoordinates = new google.maps.LatLng(data.latitude,data.longitude);
			
			mapa.setMapCenter(latLngCoordinates);
			
			
	  },
	  
	  onSearchKeyUp: function (searchField) {
			console.log('SearchField is fired');
			var sto =  Ext.getStore('Estabelecimento');
			if  (searchField.getValue() == '') {
				sto.load();
				return;
			}
			sto.load({
						scope: this,
						params: {consulta: 1, querry: searchField.getValue()}
			});
	  },
	  onClearSearch: function() {
		    console.log('Clear icon is tapped');
			var sto =  Ext.getStore('Estabelecimento');
			sto.load();
	  },
		
		
});